﻿//using System;
//using System.Collections.Generic;
//using System.Text;
//using System.Net.Sockets;
//using System.Net;
//using System.Web;

//namespace EnCor.Hosting.WSHosting
//{
//    public class HttpListener 
//    {
//        private System.Net.HttpListener _Listener;
//        private IHttpHandlerFactory _Handler;
//        private bool _ShuttingDown;


//        public HttpListener(IHttpHandlerFactory handler)
//        {
//            _Handler = handler;
//        }

//        [Obsolete]
//        public void Listen(IPAddress address, int port)
//        {
//            //// to check listener status first;
//            //if (_Listener != null)
//            //{ 
//            //    // if the listener is still listenin, throw an exception
//            //}

//            //_Listener = new System.Net.HttpListener();
//            //_Listener.Prefixes.Add(address);
//            ////address, port);
//            //_Listener.Start();
//            //_Listener.BeginGetContext(OnSocketAccepted, null);
//            ////_Listener.BeginAcceptSocket( OnSocketAccepted, null );
//        }

//        public void Listen(string[] address)
//        {
//            _Listener = new System.Net.HttpListener();
//            foreach (string url in address)
//            {
//                _Listener.Prefixes.Add(url);
//            }
//            _Listener.Start();
//            _Listener.BeginGetContext(OnSocketAccepted, null);

//        }

//        private void OnSocketAccepted(IAsyncResult ar)
//        {
//            HttpListenerContext context = _Listener.EndGetContext(ar);
//            BeginAccept();

//            //HttpListenerContext context = _Listener.GetContext();
//            HttpListenerRequest request = context.Request;

//            HttpWorkerRequest workerRequest = new SimulatedHttpRequest("", "", "", request.RawUrl, null, request.Url.Host);// _Listener.GetContext().Request;
//            HttpContext httpContext = new HttpContext( workerRequest);
//            var handler = _Handler.GetHandler(httpContext, "POST", request.RawUrl, "");
//            handler.ProcessRequest(httpContext);
//            //BeginAccept();

//            //HttpContext context = CreateContext(socket);
//            //var handler = _Handler.GetHandler(context, "", "", "");
//            //handler.ProcessRequest(context);
//        }

//        private void BeginAccept()
//        {
//            if (_ShuttingDown)
//            {
//                return;
//            }
//            _Listener.BeginGetContext(OnSocketAccepted, null);
//        }

//        public void Stop()
//        {
//            _ShuttingDown = true;

//            _Listener.Stop();
//        }

//        private HttpContext CreateContext(Socket socket)
//        {
//            HttpListenerContext context = _Listener.GetContext();
//            HttpListenerRequest request = context.Request;

//            HttpWorkerRequest workerRequest = new SimulatedHttpRequest("", "", "", request.RawUrl, null, "");// _Listener.GetContext().Request;
//            return new HttpContext(workerRequest);

//        }


//    }
//}
